import os
import shutil

# 复制某路径下的指定的文件，并保留目录结构
def copy_files_with_structure(src_dir, target_file_name, dest_dir):
    """
    复制src_dir目录及其子目录中所有名为target_file_name的文件到dest_dir，
    同时保持原目录结构。
    
    :param src_dir: 源目录路径
    :param target_file_name: 要查找并复制的文件名
    :param dest_dir: 目标目录路径
    """
    for root, dirs, files in os.walk(src_dir):
        # 构建源文件的完整路径
        src_file_path = os.path.join(root, target_file_name)
        
        # 检查当前目录下是否有目标文件
        if target_file_name in files:
            # 计算相对路径，以确定在目标目录中应创建的子目录结构
            relative_path = os.path.relpath(root, src_dir)
            dest_subdir = os.path.join(dest_dir, relative_path)
            
            # 确保目标子目录存在
            os.makedirs(dest_subdir, exist_ok=True)
            
            # 构建目标文件的完整路径
            dest_file_path = os.path.join(dest_subdir, target_file_name)
            
            # 复制文件
            shutil.copy2(src_file_path, dest_file_path)
            print(f"Copied {src_file_path} to {dest_file_path}")

# 示例用法
source_directory = 'E:\\小象第二批\\zhungeer2.7z\\准格尔金诚2\\亿联中世'
target_file_name = '贷款合同.pdf'
destination_directory = 'E:\\小象第二批\\zhungeer2.7z\\合同'

copy_files_with_structure(source_directory, target_file_name, destination_directory)
